<?php

class Application_Model_CuentasEstados extends Sgit_Model
{
    protected $_name = 'control_economico_estado';
    protected $_primary = 'id';

    protected $version = 0;


    function setAnio($anio)
    {
        $this->anio = $anio;
    }

    function setVersion($version)
    {
        $this->version = $version;
    }

    function setZona($idZona)
    {
        $this->idZona = $idZona;
    }


    function getEstados($tipo)
    {

        if (!is_array($this->idZona))
        {
            $rows = $this->getAll(array('tipo=?' => $tipo, 'anio=?' => $this->anio, 'id_zona=?' => $this->idZona, 'version=?' => $this->version));
            $estados = $this->assocArray2($rows, 'mes');
            for ($i = 1; $i <= 12; $i++)
            {
                if (!$estados[$i]['estado'])
                    $estados[$i]['estado'] = 0;
            }
            
        }else{
            
           	$select = $this->getAdapter()->select();
			$select->from( array( 'control_economico_estado' ), array('mes','anio') );
			$select->where( 'id_zona IN (?)', $this->idZona );
            $select->where( 'tipo = ?', $tipo );
            $select->where( 'anio = ?', $this->anio );
            $select->where( 'version = ?', $this->version );
            $select->group( 'mes');
            $select->having('COUNT(estado) =?',count($this->idZona));
            
            $rows = $this->getAdapter()->fetchAll($select);
            $estados = $this->assocArray2($rows, 'mes');

            for ($i = 1; $i <= 12; $i++)
            {
                   if(isset($estados[$i]['mes'])) $estados[$i]['estado']=1;
                   else {
                        $estados[$i]['estado']=0;
                        $estados[$i]['abiertos']=$this->getEstadosNocerrados($tipo,$i);
                   }
            }
        }
        

        return $estados;

    }
    
    
    function getStatusMes($mes)
    {

           	$select = $this->getAdapter()->select();
			$select->from( array( 'control_economico_estado' ), array('c'=>new Zend_DB_Expr('SUM(estado)'),) );
			$select->where( 'id_zona IN (?)', $this->idZona );
            $select->where( 'anio = ?', $this->anio );
            $select->where( 'mes = ?', $mes );
            $select->where( 'version = ?', $this->version );
            $select->where( 'tipo IN (?)', array('Alojamiento','Electricidad','MMR') );

            $c = $this->getAdapter()->fetchOne($select);
            if($c==12) return 1;
            else return 0;
    }
    
    
    function getEstados2()
    {


           	$select = $this->getAdapter()->select();
			$select->from( array( 'control_economico_estado' ), array('tipo','estado','mes','anio','id_zona','cambio_aceptado') );
			$select->where( 'id_zona IN (?)', $this->idZona );
            $select->where( 'anio = ?', $this->anio );
            $select->where( 'version = ?', $this->version );

            
            $rows = $this->getAdapter()->fetchAll($select);

            foreach($rows  as $v )
            {
                $zona[$v['tipo']][$v['id_zona']][$v['mes']]['estado']=$v['estado'];
                $zona[$v['tipo']][$v['id_zona']][$v['mes']]['mes']=$v['mes'];
                $zona[$v['tipo']][$v['id_zona']][$v['mes']]['cambio_aceptado']=$v['cambio_aceptado'];
            }

        return $zona;
            
    }
    
    
    function getAllEstados()
    {
           	$select = $this->getAdapter()->select();
			$select->from( array( 'control_economico_estado' ), array('n'=>new Zend_Db_Expr('count(estado)'),'mes') );
			$select->where( 'id_zona IN (?)', $this->idZona );
            $select->where( 'tipo IN (?)', array('Alojamiento','Electricidad','MMR') );
            $select->where( 'anio = ?', $this->anio );
            $select->where( 'version = ?', $this->version );
            $select->where( 'estado = ?', 1 );
            $select->group( 'mes');
  

            $rows = $this->getAdapter()->fetchAll($select);
            $estados = $this->assocArray2($rows, 'mes');


        
            for ($i = 1; $i <= 12; $i++)
            {
                $salida[$i]=($estados[$i]['n']==count($this->idZona)*3) ? 1 : 0;
            }

            return $salida;
    }
    
    function getLastMesCerradoResumen()
    {
        $estados=$this->getAllEstados();
        
        foreach($estados as $k => $estado)
        {
            if($estado==1) $sal[$k]=$estado;
        }
        
        return max(array_keys($sal));

    }
    
    
    function getEstadosNocerrados($tipo,$mes)
    {
            $dc=new Application_Model_Datacenter();
            
        
            $select = $this->getAdapter()->select();
			$select->from( array( 'control_economico_estado' ), array('id_zona'));
            $select->where( 'tipo = ?', $tipo );
            $select->where( 'anio = ?', $this->anio );
            $select->where( 'version = ?', $this->version );
            $select->where( 'mes = ?', $mes );
            $select->where( 'estado = ?', 1 );
            
            $rows = $this->getAdapter()->fetchAll($select);
            $estados = $this->assocArray2($rows, 'id_zona');
            
            foreach($this->idZona as $v)
            {
                if(!$estados[$v]) $salida[$v]=$dc->cacheAssoc($v,'nombre');
            }
            
        
            
            return $salida;

    }
    
    
    function getNotasCambio($mes='')
    {
            $select = $this->getAdapter()->select();
			$select->from( array( 'control_economico_estado' ));
            $select->where( 'anio = ?', $this->anio );
            if($mes)$select->where( 'mes <= ?', $mes );
            $select->where( 'version = ?', $this->version );
            $select->where("cambio_aceptado = ?",'SI');
            $select->where( 'id_zona IN (?)', $this->idZona );
            $select->where( 'LENGTH(notas_cambio) > ?', 2 );
            $select->order('mes desc');
            
            $rows = $this->getAdapter()->fetchAll($select);
            return $rows;
    }
    
    
    
    function getComite($cambio_aceptado,$fecha_peticion_cambio,$propone=null)
    {
        
          
        $select = $this->getAdapter()
        ->select()
        ->from(array('control_economico_estado'))
        ->where('objeto_cambio= ?',1);
        
        
        if($cambio_aceptado){
             $select->where("cambio_aceptado = ?",$cambio_aceptado);
        }else{
             $select->where("cambio_aceptado IS NULL OR cambio_aceptado='VISTO'");
        }
        
        
        
        if(!is_null($propone))
        {
            $select->where("propone_cambio = ?",$propone,INTEGER);
        }   
        
        Sgit_Util_dateRange::run($select,$fecha_peticion_cambio,'fecha_peticion_cambio');
        
        $rows = $this->getAdapter()->fetchAll($select);
        return $rows;

    }
    
    
    
    function changeComite($id, $valor, $notas)
    {
        
        $row = $this->getRow($id);


        $update['notas_cambio']=$row['notas_cambio'].PHP_EOL.$notas;
        $update['cambio_aceptado']=$valor;
        

                
        switch($valor){
            case 'SI':
                $update['estado']=1;
                $accion='aceptado';
                break;
            case 'VISTO':
                $accion='visto y aplazado';
                break;
            default:
                $update['estado']=0;
                $update['objeto_cambio']=0;
                $accion='rechazado';
        }
        
        
        
        
        
        $update['responde_cambio']=$this->_auth->getIdentity()->id;
        
        $result= $this->updateRow($update,$id);
        
        if($result['status']=='ok')
        {
            $fecha=new Zend_Date();
            $fecha->setDay(1)->set($row['mes'],Zend_Date::MONTH_SHORT)->set($row['anio'],Zend_Date::YEAR);
          
            $entrada['de'] = $this->_auth->getIdentity()->id;
            $entrada['asunto'] = 'Control Economico:'. ucfirst($accion);
            $entrada['body'] = "El Comite de Cambio ha $accion su propuesta:<br><br><br>Aprobación Seguimiento Economico ".$row['tipo'] .' '.$fecha->toString('MMMM yyyy').' '.Sgit_Cache::single()->model('Datacenter')->getKey($row['id_zona']);
            $entrada['body'] .="<br><br><b>Comentarios:<br>$notas</b>";
            $entrada['destinatarios'] = array($row['propone_cambio']);
            $entrada['destinatariosCC'] = array(34);
            $entrada['tipo'] = 'Otros';
            $mail=new Sgit_Mail();
			$mail->sendMsg($entrada);
            
            return array('status'=>'ok');
        }else{
            return array('status'=>'ko');
        }
    }
    
    
    
    


}
